use freeswitch_sip_cli::sip_handler::SipMessageHandler;

fn main() {
    // 设置日志级别为 DEBUG，这样 debug! 宏就能显示输出了
    tracing_subscriber::fmt()
        .with_max_level(tracing::Level::DEBUG)
        .init();
    
    println!("测试网段优先的IP选择功能");
    println!("{}", "=".repeat(50));
    
    // 测试不同的目标服务器IP
    let test_cases = vec![
        ("192.168.43.100", "192.168.43.0/24 网段"),
        ("172.27.180.50", "172.27.176.0/21 网段"),
        ("10.0.0.50", "10.0.0.0/24 网段"),
        ("8.8.8.8", "公网IP"),
    ];
    
    for (target_ip, description) in test_cases {
        println!("\n测试目标服务器: {} ({})", target_ip, description);
        println!("{}", "-".repeat(30));
        
        let handler = SipMessageHandler::new(target_ip.to_string());
        
        // 获取选择的本地IP
        let local_ip = handler.get_local_ip();
        println!("选择的本地IP: {}", local_ip);
        
        // 获取服务器IP
        let server_ip = handler.get_server_ip();
        println!("目标服务器IP: {}", server_ip);
        
        // 检查是否在同一网段
        if is_same_subnet_test(&local_ip, target_ip) {
            println!("✓ 选择了同一网段的IP");
        } else {
            println!("✗ 选择了不同网段的IP");
        }
        
        // 测试创建注册请求
        let _register_request = handler.create_register_request("1000", "1234", "sip:1000@192.168.1.100:5060");
        println!("生成的注册请求使用IP: {}", local_ip);
    }
    
    println!("\n测试完成！");
}

/// 简单的网段检查函数（用于测试）
fn is_same_subnet_test(ip1: &str, ip2: &str) -> bool {
    // 简单的实现：检查前三个八位字节是否相同
    let parts1: Vec<&str> = ip1.split('.').collect();
    let parts2: Vec<&str> = ip2.split('.').collect();
    
    if parts1.len() == 4 && parts2.len() == 4 {
        parts1[0] == parts2[0] && parts1[1] == parts2[1] && parts1[2] == parts2[2]
    } else {
        false
    }
} 